/*本页面所有方法均为公共方法
   开发成员可以引入后直接使用
 */
var common = {
	//系统运行的模式，development：开发模式，production：生产模式
	model:"development",
	// 系统对应语言
	sysLang : "",
	// 系统对应的浏览器
	sysClient : "",
	// 计数器，默认值为0
	counter : 0,
	//当前的页数
	currentPage : 1,
	//每页的数目
	pageSize : 15,
	//版本
	version : "2017032403",
	loadingData:false,
	compatCurrentPage:1,
	productCurrentPage:1,

	// 用于初始化公共属性
	initAttr : function(){
		// 语言包
		this.sysLang = this.getLang();
		// 浏览器
		this.sysClient = this.getClient();
	},
	/**
	 * @todo 字符串转换为Json对象
	 * @param str:Json字符串
	 * @return:转换后的JSON对象
	 */
	strToJson : function (str){ 
		var json = eval('(' + str + ')'); 
		return json; 
	},
	
	/**
	 * 通过此方法，把中心部分的内容加载到新的页面上去
	 * 
	 * @param pageUrl:需加载页面所页面地址;
	 * @param container，包含的内容
	 * @param reload:是否需要重新刷新页面
	 * @return
	 */
	loadPageDiv : function (pageUrl,container,reload,callback) {
		var _this = this;
		var divName = pageUrl;
		if(divName == undefined || divName == ""){
			this.showTip("加载页面不能为空");
			return false;
		}
		var lastIndexHead = parseInt(divName.lastIndexOf("/")) + 1;
		var lastIndexEnd = divName.lastIndexOf(".");
		divName = divName.substring(lastIndexHead,lastIndexEnd);

		//动态加载JS，production模式下加载压缩文件
		var loadJSName = divName;
		if(common.model == "production"){
			loadJSName += ".min"
		}

		//加上文件加载的缓存
		var loadJSNameVersion = "?version=" + common.version;
		var random = Math.random();
		
		//重新加载的时候，要显示
		if(reload){
			pageUrl = pageUrl + "?random=" + random;
		}
		//默认放到整个页面层中去
		if(container == "" || container == undefined){
			container = "shellContentBox";
		}
		// 如果传递过来页面地址，则动态取得，
		if(divName =="index"){
			pageUrl = "html/main.html?random=" + random;
		}
		// 每次申请去除缓存，加上随机码
		// 如果是主画面，则进行保存在内存中，用以解决F5跳转问题
		$("#" + container).load(pageUrl, function(){
			//console.log("first 加载页面" + pageUrl);
			//hide loading
			common.hideLoading();
			//动态加载JS，production模式下加载压缩文件
			$script('js/app/'+loadJSName+'.js' + loadJSNameVersion, divName, function () {
				//调用初始化函数
				eval(divName).initialize();
			});
			////console.log("JS===="+ divName+'.js');
		});
	},
	
	/**
	 * 获取URL的contextPath（相对地址）
	 * 
	 * @returns 地址及工程目录
	 */
	contextPath : function(){
		 // 这部分代码就是处理标题兼容问题的。
        // 由于在Chrome window.location.origin 属性是支持的，但是在IE11不支持，会导致无法正常翻页。
        var loc = window.location;
        var portStr = "";
        if(loc.port != 80){ portStr = ":"+loc.port; }
        
		var origin = location.origin;
		var pathname = location.pathname;
		var projectname = pathname.substr(0, pathname.indexOf('/', 1));
		return loc.protocol + "//" +loc.hostname + portStr + projectname;
	},
	/**
	 * ajax公共函数调用
	 * @param ajaxUrl URL
	 * @param functionParam
	 *            string 函数参数
	 * @param successCallBack
	 * @param asyncflagParam
	 *            false同步,true异步，
	 * @param storage 是否记录缓存
	 * @returns
	 */
	interfaceAjaxFunction : function(ajaxUrl,functionParam,successCallBack,asyncflagParam,otherparam,storage){
		var _this = this;
		//取得url key，用于记录本次访问的缓存，除非用户刷新或清掉缓存，否则直接使用缓存加快速度
		var sessionStorageKey = ajaxUrl.replace(/\//g,"").replace(/-/g,"_");
		// ajax地址
		var url=_this.contextPath() + ajaxUrl + "?radom=" + Math.random();
		// 同步,异步
		var asyncflag = true;// 默认异步
		if(asyncflagParam != undefined && !asyncflagParam){
			asyncflag = false;
		}
		//如果传递过来参数为空，则转为空对象
		if(functionParam == undefined || functionParam == ""){
			functionParam = {};
		}
		//缓存记录标识
		if(storage == undefined || typeof(storage) != "boolean"){
			storage = false;
		}
		
		//缓存当前参数
		var sessionStorageParam = sessionStorageKey + "Param";
		
		var jsonParam = JSON.stringify(common.getSignData(functionParam));
		//console.log("调用接口"+ ajaxUrl + ",传入参数为：" + jsonParam);
		//console.log(ajaxUrl + ",sessionStorageKey==" + sessionStorageKey);
		//看看当前接口调用是否已经调用过，调用过则取本地缓存数据
		//要加上参数，如果参数相同的情况下执行
		var sessionStorageCurrentValue = eval("window.sessionStorage." + sessionStorageKey);
		var sessionStorageCurrentParam = eval("window.sessionStorage." + sessionStorageParam);
		//console.log("param==" + (sessionStorageCurrentParam ==JSON.stringify(functionParam)));
		if(storage && sessionStorageCurrentValue != undefined && sessionStorageCurrentParam ==JSON.stringify(functionParam) && sessionStorageCurrentValue != ""){
			var result = eval('(' + sessionStorageCurrentValue + ')');
			successCallBack(result,otherparam);
			//console.log(ajaxUrl + ",sessionStorageKey==" + sessionStorageKey + "本地缓存");
		}else{
			//console.log(ajaxUrl + "调用接口");
			$.ajax({
				  type:"post",
				  url:url,
				  data:jsonParam,//JSON.stringify(functionParam),
				  async:asyncflag,
				  beforeSend: function(XMLHttpRequest) {
				         XMLHttpRequest.setRequestHeader("maurl",functionParam.maurl);
				  },
				  contentType:'application/json;charset=utf-8',
				  success: function(result){

					  try{
						  // 进行转换一次
						  if(typeof(result) == "string"){
							  result = eval('(' + result + ')');
						  }
						  if(storage){
							  //缓存当前参数
							  eval("window.sessionStorage.setItem('" + sessionStorageParam + "','" + JSON.stringify(functionParam) + "');");
							  //缓存当前接口返回内容
							  eval("window.sessionStorage.setItem('" + sessionStorageKey + "','" + JSON.stringify(result) + "');");
						  }
						//console.log("调用接口:"+ajaxUrl+"返回JSON数据串为：" + JSON.stringify(result));
						  successCallBack(result,otherparam);
					  }catch(e){
						  successCallBack(result,otherparam); 
					  }
				  },
			      error : function(XMLHttpRequest, textStatus, errorThrown) {
			    	  //layer.msg('调用接口'+ajaxUrl+'失败，请检查网络后重试');
			    	  result = {"message":"调用接口"+ajaxUrl+"失败，请检查网络后重试","status":1};
			    	  ////console.log(XMLHttpRequest.readyState + ", " + textStatus + ",XMLHttpRequest.status==" + XMLHttpRequest.status);
			    	  successCallBack(result,otherparam);
						_this.hideLoading();
				  }
			});	
		}
	},
	/**
	 * 取得浏览器语言，用于多语系判断 默认为英文
	 */
	getLang : function(){
		   var lang = "en";
		   var navLang;// 系统语言标识
		   var type=navigator.appName;
		   if (type=="Netscape"){
			   navLang = navigator.language;
		   }
		   else{
			   navLang = navigator.userLanguage;
		   }
		   // alert(navLang);
		   if(navLang == "zh-cn"||navLang == "zh-CN"){// 中文简体
			   lang = "zh";
		   }else if(navLang == "zh-tw"||navLang == "zh-TW"||navLang == "zh-hk"||navLang == "zh-HK"){// 中文繁体（包括香港繁体和台湾繁体）
			   lang = "tw";
		   }
		   // alert(lang);
		   return lang;
	},
	/**
	 * 取得当前的浏览器 看看是否为安卓、IOS，微信、或其他
	 */
	getClient : function(){
		// 判断浏览器类型
		var u = navigator.userAgent,app = navigator.appVersion;
		var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; // android终端或者uc浏览器
		var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); // ios终端
		var client = this.isWeiXin() ? "wechat" : (isiOS ? "ios" : (isAndroid ? "android" : "other"));
		return client;
	},
	/**
	 * 加载样式显示
	 */
    showLoading : function(){
    	var loadingHtml = '<div class="loadingcontainer" id="loadingPic">'
						+ '<div class="loader4"></div>'
						+ '</div>';
    	
    	if(document.getElementById("loadingPic") == null){
        	$("body").children().eq(0).before(loadingHtml);
    	}
    	$("#loadingPic").show();
    },
    /**
	 * 关闭加载样式
	 */
    hideLoading : function(){
    	$("#loadingPic").hide();
    },
     /**
		 * 带有确定按键的弹出提示
		 * 
		 * @param message
		 *            提示信息
		 * @param callback
		 *            回调函数
		 */
    showDialog : function(message,callback){},
    /**
	 * 带有确定，取消按键的弹出提示
	 * 
	 * @param message
	 * @param callback
	 */
    showConfirm : function(message,callback){
    },
    
    /**
	 * 无按键，也会自动消失的弹出提示
	 * 
	 * @param message
	 *            提示信息
	 * @param callback
	 *            回调函数
	 * @param showtime
	 *            展现时长（ms）
	 */
    showTip: function(content, time, callback){},
   showTip_middle : function(message,showtime,callback){},
   /**
	 * //判断为微信浏览器
	 * 
	 * @returns {Boolean}
	 */
   isWeiXin : function(){ 
	   	var ua = window.navigator.userAgent.toLowerCase(); 
	   	if(ua.match(/MicroMessenger/i) == 'micromessenger'){ 
	   		return true; 
	   	}else{ 
	   		return false; 
	   	} 
   },
   /**
	 * 解析URL攜帶的?之後的參數，轉換為對象，返回之
	 * 
	 * @param location
	 * @returns
	 */
   getURLparams : function(){
           var o = {};
           if(location.search){
                   var search_params = location.search.substr(1).split('&');
                   if(search_params){
                           $.each(search_params, function(i){
                                   o[this.split('=')[0]] = decodeURIComponent(this.split('=')[1]);
                           });
                   }
           }
           return o;
   },
	/**
	 * 数据长度为0时，提示无数据
	 * 
	 * @param message
	 *            显示消息
	 * @param container
	 *            显示的页面容器对应对象ID 修正
	 */
	show_nodata:function(message,container){
		var window_height = document.documentElement.clientHeight;
		// 当前对象高度
		var containerHeight = $("#" + container).height();
		// 动态获得数据
		var _height = container == undefined ? window_height - 148 : containerHeight -148;
		var _top = _height*0.5;
		var _bottom =_height * 0.5; 
		
		// 隐藏所有相关错误
		$(".error-none").hide();
		// 当前panel
		var showPanelId = window.sessionStorage.currentShownSysPanelId;
		// 生成绝不重复的内容
		var no_data = $('<div class="error-none" id="showNoDataContent' + showPanelId + '" style=" padding-top:'+ 5 +'rem;height:100%;  padding-bottom:'+ _bottom +'px;">'
					+ '<table width="100%" border="0" cellspacing="0" cellpadding="0" height="149px">'
					+ '<tr><td valign="middle" width="100%"><img class="nodata_img" src="images/no_data.png"/><p>'+ message +'</p></td></tr>'
					+ '</table>'
					+ '</div>');
		
		if(document.getElementById("showNoDataContent" + showPanelId) == null){
			if(container != undefined && container != ""){
				$("#" + container).html(no_data);
			}else{
				$(".pageDivPanel").hide();
				$("#" + showPanelId).html(no_data).show();
			}
		}
		$("#showNoDataContent" + showPanelId).show();
	},
	/**
	 * 报错的时候进行信息提示，根据是否传递过来参数进行显示
	 * 
	 * @param message
	 *            显示错误消息
	 * @param container
	 *            显示的页面容器对应对象ID 修正相应
	 */
	show_error:function(message,container){
		var window_height = document.documentElement.clientHeight;
		// 当前对象高度
		var containerHeight = $("#" + container).height();
		// 动态获得数据
		var _height = container == undefined ? window_height - 148 : containerHeight -148;
		var _top = _height*0.5;
		var _bottom =_height * 0.5;
		// 隐藏所有相关错误
		$(".error-none").hide();
		// 当前panel
		var showPanelId = window.sessionStorage.currentShownSysPanelId;
		
		var no_data = $('<div class="error-none" id="showErrorContent_' + showPanelId + '" style=" padding-top:'+ _top +'px;height:100%;  padding-bottom:'+ _bottom +'px;">'
					+ '<table width="100%" border="0" cellspacing="0" cellpadding="0" height="148px">'
					+ '<tr><td valign="middle" width="100%"><img class="error_img" src="images/error-none.png"/><p>'+ message +'</p></td></tr>'
					+ '</table>'
					+ '</div>');
		// 控制显示
		if(document.getElementById("showErrorContent_" + showPanelId) == null){
			if(container != undefined && container != ""){
				$("#" + container).html(no_data);
			}else{
				$(".pageDivPanel").hide();
				$("#" + showPanelId).html(no_data).show();
			}
		}
		$("#showErrorContent_" + showPanelId).show();
	},
    /**
	 * 判断字符是否为0-9、a-z、A-Z，是返回true,否返回false
	 * 
	 * @param char_c
	 *            传入一个字符
	 */
	isAZaz09:function(char_c) {
        var reg = /^[\u4E00-\u9FA5]+$/; 
					if(!reg.test(char_c)){ 
					// //console.log("char_c=== " + char_c + " 不是中文");
					return true; 
					} 
					// //console.log("char_c=== " + char_c + " 是中文");
					return false; 
    },

	/**
	 * 计算文件大小，并返回合适单位大小
	 * 
	 * @param fileSize
	 *            文件大小，以b为单位传递过来
	 * @returns {String}
	 */
	calcFileSize :function(fileSize){
		var rtnStr = "0B";
		// 小于1024时候,显示B
		if(fileSize < 1024){
		   rtnStr = fileSize + "B";
		}else if(fileSize >= 1024 && fileSize < 1024 * 1024){
		   rtnStr = (fileSize/1024).toFixed(2) + "KB";
		}else{
		   rtnStr = (fileSize/1024/1024).toFixed(2) + "MB";
		}
		return rtnStr;
	},
	/**
	 * 产生分页
	 */
	getPageDivide:function(allItem,container,callback,currentPageSize){
		var page = common.currentPage;
		var pageSize = currentPageSize == undefined ? common.pageSize : currentPageSize;
	    var pages = Math.floor((allItem - 1) / pageSize) + 1; 
		
		if(page < 1) page = 1;  //如果当前页码小于1
		if(page > pages)page = pages; //如果当前页码大于总数
		var Temp = "";
		
		var beginNO = (page - 1) * pageSize + 1; //开始编号
		var endNO = page * pageSize; //结束编号
		if(endNO > allItem) endNO = allItem;
		if(endNO == 0) beginNO = 0;
		
		if(!(page <= pages)) page = pages;
		////console.log("总页数:<strong class='f90'>" + pages + "</strong>&nbsp;&nbsp;显示:<strong class='f90'>" + beginNO + "-" + endNO + "</strong>"); 
		
		//分页
		if(page > 1 && page !== 1){Temp ="<a href='javascript:void(0)' data-num='1'>&lt;&lt;第一页</a> <a href='javascript:void(0)' data-num='" + (page - 1) + "'>上一页</a>&nbsp;"}else{Temp = "<span class='disabled'>&lt;&lt;第一页</span>&nbsp;<span class='disabled'>上一页</span>&nbsp;"};
		
		
		//完美的翻页列表
		var pageFrontSum = 3; //当页前显示个数
		var pageBackSum = 3; //当页后显示个数
		
		var pageFront = pageFrontSum - (page - 1);
		var pageBack = pageBackSum - (pages - page);
		if(pageFront > 0 && pageBack < 0)pageBackSum += pageFront; //前少后多，前剩余空位给后
		if(pageBack > 0 && pageFront < 0)pageFrontSum += pageBack; //后少前多，后剩余空位给前
		var pageFrontBegin = page - pageFrontSum;
		if(pageFrontBegin < 1)pageFrontBegin = 1;
		var pageFrontEnd = parseInt(page) + pageBackSum;
		if(pageFrontEnd > pages)pageFrontEnd = pages;
		
		if(pageFrontBegin != 1) Temp += '<a href="javascript:void(0)" data-num="' + (page - 10) + '" title="前10页">..</a>';
		for(var i = pageFrontBegin;i < page;i ++){
			Temp += " <a href='javascript:void(0)' data-num='" + i + "'>" + i + "</a>";
		}
		Temp += " <span class='current'>" + page + "</span>";
		for(var i = parseInt(page) + 1;i <= pageFrontEnd;i ++){
			Temp += " <a href='javascript:void(0)' data-num='" + i + "'>" + i + "</a>";
		}
		if(pageFrontEnd != pages) Temp += " <a href='javascript:void(0)' data-num='" + (parseInt(page) + 10) + "' title='后10页'>..</a>";
		
		if(page != pages){Temp += "&nbsp;&nbsp;<a href='javascript:void(0)' data-num='" + (parseInt(page) + 1) + "'>下一页</a> <a href='javascript:void(0)'  data-num='" + pages + "'>最末页&gt;&gt;</a>"}else{Temp += "&nbsp;&nbsp;<span class='disabled'>下一页</span>&nbsp;<span class='disabled'>最末页&gt;&gt;</span>"}
		
	    ////console.log("temp===" + Temp);
		$("#" + container).html(Temp);
		//事件绑定
		$("#" + container).find("a").unbind().on("click",function(){
			var currentNum = $(this).attr("data-num");
			//当前页面赋值
			common.currentPage = parseInt(currentNum);
			//回调函数，用来查询数据使用
			callback();
		});
	},
	
	/**
	 * 签名算法的处理
	 */
	getSignData: function(mainData){
	      // FIXME 这里的平台数据暂时用的死的，后期再完善。
	      var ios = navigator.userAgent.match(/(iPad|iPhone|iPod)/g);
	      var platform = "IOS";
	      if(!ios){
	         platform = "Android";
	      }
	      var data = {
		        data:mainData,
		        ipAddress:"192.168.1.1",
		        platform:common.sysClient,//platform:device.platform,  //cordova 获取设备名称方法
				timestamp:new Date().getTime().toString(),
		        version:common.version,
		        userid:window.localStorage.userid==undefined ? "noUser" : window.localStorage.userid
			}
	      	data.sign = this.getSignString(data);
			return data;
	  },
      getSignString: function(data){
	      var temp = "";
	      for(key in data){
	        var value = data[key];
	        if(key == "data"){
	          value = JSON.stringify(value);
	        }
	        temp = temp + key + "=" + value;
	        temp = temp + "&";
	      }
	      temp = temp.substr(0,temp.length-1);
	      return md5(this.enUnicodeString(temp));
	  },
	  enUnicodeString : function(str) {
	      var res=[];
	      for(var i=0;i < str.length;i++)
	          res[i]=(str.charCodeAt(i).toString(16)).slice(-4);
	      return "\\u"+res.join("\\u");
	  }

};

//加载完成自动初始化
common.initAttr();
//调用初始化函数
common.loadPageDiv("index.html");